package com.huxi.lang.object.spi;

import com.huxi.lang.validation.predicate.VPredicate;

/**
 * 反射型字段定义接口
 * 
 * @author jian.wu
 *
 */
public interface ReflectFieldDefine {

	/**
	 * 设置字段是否参与序列化、反序列化。
	 * 
	 * @param serialize   是否参与序列化
	 * @param deserialize 是否参与反序列化
	 * @return 字段定义
	 */
	ReflectFieldDefine withAccessable(boolean serialize, boolean deserialize);

	/**
	 * 设置字段是否参与序列化
	 * 
	 * @param serialize 是否参与序列化
	 * @return 字段定义
	 */
	ReflectFieldDefine withSerialize(boolean serialize);

	/**
	 * 设置字段是否参与反序列化
	 * 
	 * @param serialize 是否参与反序列化
	 * @return 字段定义
	 */
	ReflectFieldDefine withDeserialize(boolean deserialize);

	/**
	 * 设置字段值格式模板
	 * 
	 * @param format 格式模板
	 * @return 字段定义
	 */
	ReflectFieldDefine withFormat(String format);

	/**
	 * 设置字段名称（友好）
	 * 
	 * @param displayName 名称
	 * @return 字段定义
	 */
	ReflectFieldDefine withDisplayName(String displayName);

	/**
	 * 设置字段描述
	 * 
	 * @param describe 描述
	 * @return 字段定义
	 */
	ReflectFieldDefine withDescribe(String describe);

	/**
	 * 设置字段校验器
	 * 
	 * @param predicate 校验器
	 * @return 字段定义
	 */
	ReflectFieldDefine withPredicate(VPredicate predicate);

	/**
	 * 设置字段校验失败提示消息
	 * 
	 * @param message 提示消息
	 * @return 字段定义
	 */
	ReflectFieldDefine withMessage(String message);
}
